import axios from 'axios'
// 导入store实例
import store from '@/store'
// 导入自定义history
import customHistory from '@/utils/history'

// 消息提示
import { message } from 'antd'
import { logoutAction } from '@/store/action/login'
// console.log('路由对象：', customHistory)
// 创建axios新实例（自己）
const request = axios.create({
  //后台基础地址
  baseURL: 'http://geek.itheima.net/v1_0'
})
// 1. 请求拦截器：发请求之前
request.interceptors.request.use(config => {
  // 场景：为header统一添加token
  const { login } = store.getState()
  if (login) {
    config.headers.Authorization = `Bearer ${login}`
  }
  return config
})

// 2. 响应拦截器：先获取到后台的response
request.interceptors.response.use(
  res => {
    // 1. 请求成功200，进入到这里
    //console.log(1, res)
    // 场景：简化数据返回,这里返回后，页面或action函数中才能获取返回的数据
    return res.data
  },
  error => {
    // 2. 请求失败：400 401 500 等，进入到这里
    // 场景：处理401token失效，跳回登录页
    //console.dir(error)
    if (error.response.status === 401) {
      /**
       * 处理401token失效:
       * 1. 错误提示消息
       * 2. 清除本地token和用户信息
       * 3. 跳回登录页，携带当前页面地址（下次成功登录，可以跳回401的时候访问的页面）
       */
      message.error(error.response.data.message)
      store.dispatch(logoutAction())
      // 在js中怎么跳页面？1. 不能用 useHistory（） 2. 没有路由实例
      // 使用customHistory跳转
      customHistory.replace({
        pathname: '/login',
        state: {
          from: customHistory.location.pathname
        }
      })
    }
    return Promise.reject(error)
  }
)

export default request
